package function

import (
	"math/rand"
	"time"
)

type FuncString struct {
	Max    int    // 最大长度
	Min    int    // 最小长度
	Repeat int    // 默认值重复次数
	Size   int    // 数据量
	Value  string // 默认值
	Data   []interface{}
}

func RepeatString(repeat, size int, value string) *FuncString {
	return &FuncString{
		Repeat: repeat,
		Size:   size,
		Value:  value,
		Data:   make([]interface{}, size),
	}
}

func RandomString(min, max, size int, value string) *FuncString {
	return &FuncString{
		Max:   max,
		Min:   min,
		Size:  size,
		Value: value,
		Data:  make([]interface{}, size),
	}
}

func (f *FuncString) Build() []interface{} {
	if f.Repeat > 0 {
		var temp string
		for i := 0; i < f.Repeat; i++ {
			temp += f.Value
		}
		for i := 0; i < f.Size; i++ {
			f.Data[i] = temp
		}
	} else if f.Max > 0 && f.Min > 0 {
		rand.Seed(time.Now().Unix())
		for i := 0; i < f.Size; i++ {
			var temp string
			for j := 0; j < rand.Intn(f.Max-f.Min)+f.Min; j++ {
				temp += f.Value
			}
			f.Data[i] = temp
		}
	} else {
		for i := 0; i < f.Size; i++ {
			f.Data[i] = f.Value
		}
	}
	return f.Data
}
